ARTICLES > PHP

PHP Pagination - แบ่งหน้าด้วย php Turn Back

2016-09-29 22:58:43

เป็น PHP ฟังก์ชั่น ที่ใช้สำหรับแบ่งหน้า ในกรณีดึงข้อมูลมาแสดงเป็น Item list
พร้อมกับ css จัดรูปแบบเพื่อความสะดวกใช้งาน
 
pagination.php
<?php
 
function displayPaging( $total, $limit, $pagenumber, $baseurl, $showpages ){
 
// do calculations
$pages = ceil($total / $limit);
$offset = ($pagenumber * $limit) - $limit;
$end = $offset + $limit;
 
// prepare paging links
$html .= '<div>';
 
// if first link is needed
if($pagenumber > 1) { $previous = $pagenumber -1;
$html .= '<a href="'.$baseurl.'1">'.$icon_first.'</a> ';
}
 
// if previous link is needed
if($pagenumber > 2) { 
         $previous = $pagenumber -1;
$html .= '<a href="'.$baseurl.''.$previous.'">'.$icon_previous.'</a> ';
}
 
// print page numbers
if ($pages>=2) {
$p=1;
$html .= "";
$pages_before = $pagenumber - 1;
$pages_after = $pages - $pagenumber;
$show_before = floor($showpages / 2);
$show_after = floor($showpages / 2);
 
if ($pages_before < $show_before){
$dif = $show_before - $pages_before;
$show_after = $show_after + $dif;
}
 
if ($pages_after < $show_after){
$dif = $show_after - $pages_after;
$show_before = $show_before + $dif;
}
 
$minpage = $pagenumber - ($show_before+1);
$maxpage = $pagenumber + ($show_after+1);
 
if ($pagenumber > ($show_before+1) && $showpages > 0) {
$html .= " ... ";
}
 
while ($p <= $pages) {
if ($p > $minpage && $p < $maxpage) {
if ($pagenumber == $p) {
$html .= " <span class="current">".$p."</span>";
} else {
$html .= ' <a href="'.$baseurl.$p.'">'.$p.'</a>';
}
}
$p++;
}
 
if ($maxpage-1 < $pages && $showpages > 0) {
$html .= " ... ";
}
}
 
// if next link is needed
if($end < $total) { 
$next = $pagenumber +1;
if ($next != ($p-1)) {
$html .= ' <a href="'.$baseurl.$next.'">'.$icon_next.'</a>';
}
}
 
// if last link is needed
if($end < $total) {
$last = $p -1;
$html .= ' <a href="'.$baseurl.$last.'">'.$icon_last.'</a>';
}
 
 
$html .= '</div>';
 
// return paging links
return $html;
}
 
?>
ค่าตัวแปรต่างๆ ที่ส่งเข้าไปใน Function
$total เป็นจำนวน record ข้อมูลทั้งหมด
$limit จำนวน list record ที่ต้องการให้แสดงภายใน 1 หน้า
$offset คือ เลขหน้าที่ต้องการดู ใช้ส่งเป็น parameter ไปกับ url
$baseurl  คือ url ของหน้านั้น (รวม offset) 
$icon จำนวนของ paging icon ที่ต้องการแสดงให้กดเปลี่ยนหน้า
 
data_record.php

<?php

$con=mysqli_connect("localhost","my_user","my_password","my_db");
$sql = mysqli_query($con,"SELECT * FROM content");

 
// Pagination
$total = mysqli_num_rows($sql);
$limit = 10;
$icon = 10;
 
$offset=htmlspecialchars(trim($_GET['off']));
if($offset=='')$offset=1;
 
$baseurl = "?page=".$page."&do=".$do."&off=";
$baseurl .= $_GET[cat]!=""?"&cat=".$_GET[cat]:"";
$page_start = ($limit*$offset)-$limit;
 
include_once 'pagination.php';
?>

// แสดง Pagination
<div class="pagin"><?=displayPaging($total, $limit, $offset, $baseurl, $icon);?></div>

<?php
$qry = mysqli_query($con,"SELECT * FROM content LIMIT $page_start , $limit ");
while( $result = mysqli_fetch_array($qry) ){
?>
 
 Fetch rows data from Database.
 
<?
} // Ending while loop
?>
style.css
.pagin {padding: 2px 0;margin: 4px 0; font-weight: bold; width:100%}
.pagin a, .pagin span {padding: 6px 8px; margin:0}
.pagin a {background-color:#efefef; color:#666; text-decoration:none; border:solid 1px #efefef}
.pagin a:visited {background-color: #efefef; color: #60606F; text-decoration: none}
.pagin a:hover, .pagin a:active {border: solid 1px #cc0000; background-color: #fff; color: #cc0000; text-decoration: none}
.pagin span {cursor: default; border: solid 1px #ddd; background-color: #f0f0f0; color: #b0b0b0}
.pagin span.current {border: solid 1px #666; background-color: #666}
Turn Back